﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DECOR.DL.DALCF;
using System.Security.Cryptography;
using DECOR.BL.BE;

namespace DECOR.BL.BC
{
    public class ParametroBC
    {
        #region Mejoras Web v2
        public List<StockBE> getDataLotes(string pMatnr, decimal pCant, string pCentro, string pAlmacen, string pLote,
            string pNumPedido, string pPosNr, string pOrgVtas, string pCanalDist)
        {
            return DaoFactory.ParametroDALC.getDataLotes(pMatnr, pCant, pCentro, pAlmacen, pLote,
                                                         pNumPedido, pPosNr, pOrgVtas, pCanalDist);
        }

        public void getDataLotes(string pMatnr, decimal pCant, string pCentro, string pAlmacen, string pLote,
                        string pNumPedido, string pPosNr, string pOrgVtas, string pCanalDist,
                        ref List<GenericBE> lstCentro, ref List<GenericBE> lstAlmacen, ref List<GenericBE> lstLote, ref string pCentroOp,
                        ref string pAlmacenOp, ref string pLoteOp)
        { 
                     DaoFactory.ParametroDALC.getDataLotes( pMatnr,  pCant,  pCentro,  pAlmacen,  pLote,
                                 pNumPedido,  pPosNr,  pOrgVtas,  pCanalDist,
                                ref  lstCentro, ref  lstAlmacen, ref  lstLote, ref  pCentroOp,
                                ref  pAlmacenOp, ref  pLoteOp);
        
        }
        
        
        public void getDataDDL(ref List<GenericBE> lstZipCodes, ref List<GenericBE> lstAsesores,
            ref List<GenericBE> lstBloEnt, ref List<GenericBE> lstBloFac, ref List<GenericBE> lstCondExp,
            ref List<GenericBE> lstGrpCond, ref List<GenericBE> lstGrpVend, ref List<GenericBE> lstMotPed,
            ref List<GenericBE> lstOfVtas, ref List<GenericBE> lstSectores, ref List<GenericBE> lstTipoDoc, ref List<GenericBE> lstTipoVisita)
        {
            DaoFactory.ParametroDALC.getDataDDL(ref lstZipCodes, ref lstAsesores,
                                                ref lstBloEnt, ref lstBloFac, ref lstCondExp,
                                                ref lstGrpCond, ref lstGrpVend, ref lstMotPed,
                                                ref lstOfVtas, ref lstSectores, ref lstTipoDoc, ref lstTipoVisita);

            //********************************************************************++
            //agregamos un true si el codigo de tipo de documento se crea con referencia
            foreach (GenericBE item in lstTipoDoc)
            {
                item.conReferencia = ParametroBC.Instance.esTipoX(item.Codigo, "CodConRef");
            }
        }

        public void get_Param_PFact(ref List<GenericBE> lstDenom, ref List<GenericBE> lstMoneda,
            ref List<GenericBE> lstMotivoBloq, ref List<GenericBE> lstClaseDoc, ref List<GenericBE> lstRFACT,
            ref List<GenericBE> lstSTATU, ref List<GenericBE> lstTFPLU,ref List<GenericBE> lstCPag)
        {
            DaoFactory.ParametroDALC.get_Param_PFact(ref  lstDenom, ref  lstMoneda,
                                                        ref lstMotivoBloq, ref lstClaseDoc, ref lstRFACT,
                                                        ref  lstSTATU, ref lstTFPLU, ref lstCPag);
        }
        #endregion

        #region Singleton
        private ParametroBC() { }
        private static ParametroBC _instance = null;
        public static ParametroBC Instance
        {
            get { return (_instance == null) ? _instance = new ParametroBC() : _instance; }
        }
        #endregion

        public decimal getIGV
        {
            get { return Math.Round(DaoFactory.ParametroDALC.getIGV(), 2); }
        }

        public int getDecimales
        {
            get { return DaoFactory.ParametroDALC.getDecimales(); }
        }

        public decimal getTipoCambio()
        {
            return decimal.Round(DaoFactory.ParametroDALC.getTipoCambio(), 4);
        }

        public List<GenericBE> getListaZipCode()
        {
            return DaoFactory.ParametroDALC.getListaZipCode();
        }
        public ClienteBE getClienteReniec(string pDNI)
        {
            return DaoFactory.ParametroDALC.getClienteReniec(pDNI);
        }

        public decimal getTipoCambio(DateTime pFecha)
        {
            return decimal.Round(DaoFactory.ParametroDALC.getTipoCambio(pFecha), 4);
        }


        public bool esTipoOferta(string pCodTipoDoc)
        {
            return DaoFactory.ParametroDALC.esTipoOferta(pCodTipoDoc);
        }
        public bool esTipoServicio(string pCodTipoDoc)
        {
            return DaoFactory.ParametroDALC.esTipoServicio(pCodTipoDoc);
        }
        public bool esTipoPosCombo(string pCodTipoPos)
        {
            return DaoFactory.ParametroDALC.esTipoPosCombo(pCodTipoPos);
        }
        public bool esTipoPosKit(string pCodTipoPos)
        {
            return DaoFactory.ParametroDALC.esTipoPosKit(pCodTipoPos);
        }
        public bool esTipoCabCombo(string pCodTipoPos)
        {
            return DaoFactory.ParametroDALC.esTipoCabCombo(pCodTipoPos);
        }
        public bool esTipoCabKit(string pCodTipoPos)
        {
            return DaoFactory.ParametroDALC.esTipoCabKit(pCodTipoPos);
        }
        public bool esTipoSinLote(string pCodTipoDoc)
        {
            return DaoFactory.ParametroDALC.esTipoSinLote(pCodTipoDoc);
        }

        public bool esTipoX(string pCodigo, string pConfigKey)
        {
            return DaoFactory.ParametroDALC.esTipoXY(pCodigo, pConfigKey);
        }


        public string getParamValue(string key)
        {
            return DaoFactory.ParametroDALC.getParamValue(key);
        }

        public static string encryptString(string pPassword)
        {
            MD5 objMd5 = new MD5CryptoServiceProvider();// .Create();
            ASCIIEncoding enc = new ASCIIEncoding();
            byte[] stream = null;
            StringBuilder sb = new StringBuilder();
            stream = objMd5.ComputeHash(enc.GetBytes(pPassword));
            for (int i = 0; i < stream.Length; i++) sb.AppendFormat("{0:x2}", stream[i]);
            return sb.ToString();
        }

        public static string fechaLarga(DateTime pFecha)
        {
            string pDia, pMes;
            switch (pFecha.DayOfWeek)
            {
                case DayOfWeek.Monday: pDia = "Lunes"; break;
                case DayOfWeek.Tuesday: pDia = "Martes"; break;
                case DayOfWeek.Wednesday: pDia = "Miércoles"; break;
                case DayOfWeek.Thursday: pDia = "Jueves"; break;
                case DayOfWeek.Friday: pDia = "Viernes"; break;
                case DayOfWeek.Saturday: pDia = "Sábado"; break;
                case DayOfWeek.Sunday: pDia = "Domingo"; break;
                default: pDia = ""; break;
            }
            switch (pFecha.Month)
            {
                case 1: pMes = "Enero"; break;
                case 2: pMes = "Febrero"; break;
                case 3: pMes = "Marzo"; break;
                case 4: pMes = "Abril"; break;
                case 5: pMes = "Mayo"; break;
                case 6: pMes = "Junio"; break;
                case 7: pMes = "Julio"; break;
                case 8: pMes = "Agosto"; break;
                case 9: pMes = "Septiembre"; break;
                case 10: pMes = "Octubre"; break;
                case 11: pMes = "Noviembre"; break;
                case 12: pMes = "Diciembre"; break;
                default: pMes = ""; break;
            }
            return pDia + ", " + pFecha.Day + " de " + pMes + " de " + pFecha.Year;
        }


        public static bool contraseniaValida(string password)
        {
            int bandera = 0; string cadaux = "";
            int i; bool respuesta = false;
            for (i = 0; i < password.Length; i++)
            {
                bandera = 0;
                if (password[i].Equals('0') || password[i].Equals('1') || password[i].Equals('2') || password[i].Equals('3') || password[i].Equals('4') || password[i].Equals('5') || password[i].Equals('6') || password[i].Equals('7') || password[i].Equals('8') || password[i].Equals('9'))
                {
                    bandera = 1;
                    cadaux = cadaux + password[i];
                }
            }
            if (cadaux.Length.Equals(password.Length) && bandera.Equals(1))
            {
                respuesta = false;
            }
            else if (cadaux.Length < password.Length && bandera.Equals(1))
            {
                respuesta = true;
            }
            else if (bandera.Equals(0))
            {
                respuesta = false;
            }
            return respuesta;
        }

        public List<TipoDocumentoBE> getTipoDocumentos()
        {
            return DaoFactory.ParametroDALC.getTipoDocumentos();
        }

        public List<GenericBE> getDocVtaCot()
        {
            return DaoFactory.ParametroDALC.getDocVtaCot();
        }
    }
}
